package com.gitee.maojian.bianrysearch;

import org.junit.Test;

/**
 * BM18 二维数组中的查找
 * 描述
 * 在一个二维数组array中（每个一维数组的长度相同），每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
 * [
 * [1,2,8,9],
 * [2,4,9,12],
 * [4,7,10,13],
 * [6,8,11,15]
 * ]
 * 给定 target = 7，返回 true。
 * 给定 target = 3，返回 false。
 * 数据范围：矩阵的长宽满足 0 \le n,m \le 5000≤n,m≤500 ， 矩阵中的值满足 0 \le val \le 10^90≤val≤10
 * 9
 * 进阶：空间复杂度 O(1) ，时间复杂度 O(n+m)
 */
public class Q_BM18 {
    public boolean Find(int target, int[][] array) {
        int m = array.length;
        if (m == 0) return false;
        int n = array[0].length;
        if (n == 0) return false;
        int coordinateX = 0;
        int coordinateY = n - 1;
        while (coordinateX < m && coordinateY >= 0) {
            int curNum = array[coordinateX][coordinateY];
            if (curNum == target) {
                return true;
            } else if (target > curNum) {
                coordinateX++;
            } else {
                coordinateY--;
            }
        }
        return false;
    }


    @Test
    public void test() {
        int[][] array = new int[][]{
                {1, 2, 8, 9},
                {2, 4, 9, 12},
                {4, 7, 10, 13},
                {6, 8, 11, 15}
        };
        System.out.println(Find(7, array));
    }
}
